
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>如何高效组织你的 Java 代码库 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>如何高效组织你的 Java 代码库 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">高效组织代码库能为软件项目带来哪些核心好处？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">主要有三点：1. 提高可维护性，开发者能快速定位和修改代码；2. 增强可扩展性，方便在不影响现有代码稳定性的情况下添加新功能；3. 促进团队协作，帮助团队成员更好地理解代码，减少沟通成本。</div>
          </div>
          <div class="card-source">来源: 1. 为什么需要高效组织代码库？</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">原则</div>
          <div class="card-question">文档中提到的代码库组织应遵循哪四个基本原则？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">原则</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">四个基本原则是：1. 模块化设计，将代码库划分为职责特定的模块，通过清晰接口通信以减少耦合；2. 分层架构，将代码库划分为职责明确的层次（如表现层、业务逻辑层）；3. 遵循命名规范，使用一致且具有描述性的命名；4. 保持简洁，避免过度设计和功能冗余。</div>
          </div>
          <div class="card-source">来源: 2. 代码库组织的基本原则</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">模式</div>
          <div class="card-question">文档介绍了哪两种主要的包结构划分方式？它们分别适用于什么场景？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">模式</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">文档介绍了两种方式：1. 按功能划分包（如controller, service, repository），适用于一般项目；2. 按模块划分包（如user, product），每个模块内再按功能分层，这种方式更适合大型项目，便于模块化开发和维护。</div>
          </div>
          <div class="card-source">来源: 3.1 包结构设计</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">在分层架构中，“表现层”（Controller）的核心职责是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">表现层负责处理 HTTP 请求和响应。其控制器类应尽量简洁，只包含请求处理逻辑，而将具体的业务逻辑委托给服务层处理。</div>
          </div>
          <div class="card-source">来源: 3.2.1 表现层（Controller）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">“业务逻辑层”（Service）在分层架构中扮演什么角色？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">业务逻辑层负责实现项目的核心业务功能。为了避免功能冗余，服务类应尽量遵循单一职责原则。</div>
          </div>
          <div class="card-source">来源: 3.2.2 业务逻辑层（Service）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">“数据访问层”（Repository）的主要功能是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">数据访问层负责与数据库进行交互。其仓库接口应当保持简洁，只包含数据访问相关的方法。</div>
          </div>
          <div class="card-source">来源: 3.2.3 数据访问层（Repository）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">实践</div>
          <div class="card-question">对于项目中的通用功能（如字符串检查），文档推荐了什么样的处理方式？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">实践</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">文档推荐将通用功能封装在工具类（例如放在 util 包中）中，以避免代码重复。这些工具类的方法应尽量是静态方法，以便于调用。</div>
          </div>
          <div class="card-source">来源: 3.3 工具类和通用功能</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">实践</div>
          <div class="card-question">针对大型项目，文档推荐了哪种项目管理方式来组织代码库？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">实践</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">对于大型项目，推荐使用 Maven 多模块项目。这种方式可以将代码库划分为多个子模块，每个子模块都可以独立进行开发、测试和部署。</div>
          </div>
          <div class="card-source">来源: 5.1 使用 Maven 多模块项目</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">实践</div>
          <div class="card-question">除了合理的结构设计，还有哪些最佳实践有助于保持代码库的质量和可维护性？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">实践</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">文档提到了两点：1. 遵循代码规范，使用 CheckStyle、SonarLint 等工具确保代码风格一致；2. 定期重构，通过优化包结构和类设计来保持代码库的简洁性和可维护性。</div>
          </div>
          <div class="card-source">来源: 5. 最佳实践</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
